@nteract/commutable
Commutable is a package to represent a Jupyter notebook document, as well as
operations on the notebook, as a series of immutable notebooks, each one with
its own state at a point in time.
This package follows the principles below, based on
Tom MacWright's
outline for practical undo.
- A notebook document is immutable. The notebook document's representation
is never mutated in-place.
- Changes to a notebook document are encapsulated into operations that
take a previous version and return a new version of the notebook without
modifying the old version.
- History is represented as a list of states, with the past on one end, the
present on the other, and an index that can back up into 'undo states'.
- Modifying a notebook document causes any future states to be thrown away.
Installation
$ yarn add @nteract/commutable
$ npm install --save @nteract/commutable
Usage
The example below shows how we can create an empty Markdown cell in our
nteract notebook application. We use the emptyMarkdownCell
immutable object
exported from this package to represent a new empty Markdown cell in a
notebook document.
import { emptyMarkdownCell } from "@nteract/commutable";
export default () => (
<MarkdownPreview
id="a-random-cell-id"
cell={emptyMarkdownCell}
editorFocused={false}
/>
);
Documentation
You can view the reference documentation for @nteract/commutable
in the
package docs.
Support
If you experience an issue while using this package or have a feature request,
please file an issue on the issue board
and, if possible, add the pkg:commutable
label.
License
BSD-3-Clause